Etudes qualitatives sur le web

M2 Marketing digital

Sophie Balech

IAE Amiens
sophie.balech@u-picardie.fr

23/10/2024

Objectifs du cours

  • Savoir constituer un corpus à partir de données web

  • Être capable d’analyser un corpus :

    • termes fréquents

    • POS et dépendances nominales

    • analyse du sentiment

    • topics

  • Utiliser RStudio et le langage R

Évaluation

  • Commune avec l’UE “Stratégies de distribution à l’ère du cross-canal”

  • Réalisation d’une netnographie par groupe de 2 (à 3) étudiants

  • À rendre pour le dernier cours de “Stratégies de distribution à l’ère du cross-canal”

Une prise de hauteur est attendue dans la conduite de cette analyse, en mobilisant des concepts et cadres théoriques vus dans le cours “Stratégies de distribution à l’ère de l’omnicanal”.

Analyse d’un corpus

  • Par groupe de 2 (à 3) étudiants

  • Réaliser une netnographie :

    • Choisir une enseigne de distribution

    • Collecter et analyser les avis en ligne postés par les clients sur le site de l’enseigne ou sur les forums clients

    • Proposer des recommandations à l’enseigne pour répondre aux attentes des clients.

  • Le rendu prendra la forme :

    • D’un rapport réalisé au format Quarto et publié en html, s’appuyant sur les outils méthodologiques abordés dans l’UE “Études qualitatives sur le web”

    • À rendre pour la dernière séance de “Stratégies de distribution à l’ère du cross-canal”

    • D’un exposé de 15 minutes lors de la dernière séance de “Stratégies de distribution à l’ère du cross-canal”

Plan du cours

  1. Introduction :
    • Exemple d’analyse
    • Le vocabulaire du text mining
    • Le langage R et l’utilisation de RStudio
  2. Constituer son corpus
  3. Prise en main du logiciel et premières analyses
  4. Annotations et dépendances syntaxiques
  5. Analyse du sentiment
  6. Topics Analysis et analyse de profils

Introduction

Exemple d’analyse

Corpus de 4 388 avis clients scrapés depuis TrustPilot concernant le site e-commerce Oiseaux Mania

Introduction

Le vocabulaire du text mining

  • Les métadonnées d’un corpus : toutes les variables permettant de caractériser un texte en tant que texte
    • Exemples : titre, date, auteur, …
  • Corpus

  • Mot / terme

  • Token

  • NLP

  • POS

  • Lemmes, stemmes

  • N-gramme

  • Dtm, dfm

  • Stopwords

  • Annotations

Introduction

Les sentiments

Tonalité positive ou négative

La roue des émotions de Plutchik (1980) :

Introduction

Le langage R et l’utilisation de RStudio

  • Un langage informatique pour les calculs statistiques

  • Un logiciel libre

  • Une communauté très active

  • De nombreuses ressources en ligne

  • Le principe des packages (library ou bibliothèques de fonctions)

Introduction

R et RStudio

Des ressources en ligne

Constituer son corpus

Outil recommandé : WebScraper

Constituer son corpus

Ou directement en R

library(rvest)
library(tidyverse)

reviews <- NULL
for (j in 1: 4){
    url<-paste0("https://fr.trustpilot.com/review/oiseaux-mania.com?page=",j)
    # Sys.sleep(5)
    page<-read_html(url)
      
    review_card <- page %>%
      html_elements("div.styles_reviewCardInner__EwDq2")
      
      name <- review_card %>%
        html_element("span.typography_heading-xxs__QKBS8.typography_appearance-default__AAY17") %>%
        html_text()
      
      rating <- review_card %>%
        html_elements("div.star-rating_starRating__4rrcf.star-rating_medium__iN6Ty") %>%
        html_element("img")%>%
        html_attr("alt")%>%
        str_extract("[:digit:]")
      
      published <- review_card%>%
        html_elements(".styles_reviewContentwrapper__zH_9M")%>%
        html_element("p.typography_body-m__xgxZ_")%>%
        html_text()%>%
        str_remove("Date de l'expérience: ")
      
      verified <- review_card %>%
        html_element(".styles_detailsIcon__yqwWi") %>%
        html_text()
      
      title <- review_card %>%
        html_element("h2")%>%
        html_text()
      
      content <- review_card%>%
        html_elements(".styles_reviewContentwrapper__zH_9M")%>%
        html_element("p.typography_body-l__KUYFJ") %>%
        html_text2()
      
      
      reviews <- rbind(reviews, data.frame(
        name = name, 
        rating = rating,
        published = published,
        verified = verified,
        title = title, 
        content = content
      ))
      
    j<-j+1
  }

reviews<-reviews%>%
  mutate(comments=case_when(
    is.na(content)==TRUE~title,
    str_detect(title, "…")==TRUE ~ content,
    str_equal(title, str_sub(content, start=1, end=str_count(title)))==TRUE~content,
    .default = paste0(title,". " ,content))
  )